<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html lang="zh-CN">
<%@include file="/WEB-INF/include-head.jsp" %>
<script type="text/javascript"></script>
<link rel="stylesheet" href="css/pagination.css"/>
<script type="text/javascript" src="jquery/jquery.pagination.js"></script>
<link rel="stylesheet" href="ztree/zTreeStyle.css"/>
<script type="text/javascript" src="ztree/jquery.ztree.all-3.5.min.js"></script>
<script type="text/javascript" src="crowd/my-role.js"></script>
<script type="text/javascript">

    $(function () {

        // 1.为分页操作准备初始化数据（全局变量形式）
        window.pageNum = 1;
        window.pageSize = 5;
        window.keyword = "";

        // 2.调用执行分页的函数，显示分页效果
        generatePage();

        // 3.搜索按钮的单击响应函数
        $("#searchBtn").click(function () {
            window.keyword = $("#keywordInput").val();
            generatePage();
        });

        // 4.点击新增按钮打开模态框
        $("#showAddModalBtn").click(function () {
            $("#addModal").modal("show");
        });

        // 5.给新增模态框中的保存按钮绑定单击响应函数
        $("#saveRoleBtn").click(function () {

            // 获取用户在文本框中输入的角色名称
            var roleName = $.trim($("#addModal [name=roleName]").val());

            // 发送 Ajax 请求
            $.ajax({
                url:"role/save.json",
                type:"post",
                data:{
                    name:roleName
                },
                dataType:"json",
                success:function (response) {
                    var result = response.result;

                    if(result == "SUCCESS"){
                        layer.msg("操作成功！");
                        // 将页码定位到最后一页
                        window.pageNum = 999999;
                        // 重新加载分页数据
                        generatePage();
                    }

                    if (result == "FAILED"){
                        layer.msg("操作失败！"+response.message);
                    }
                },
                error:function (response) {
                    layer.msg(response.status+" "+response.statusText);
                }
            });

            // 关闭模态框
            $("#addModal").modal("hide");
            // 清理模态框内容
            $("#addModal [name=roleName]").val("");

        });

        // 6.点击更新按钮打开模态框
        $("#rolePageBody").on("click",".pencilBtn",function () {
            //  打开模态框
            $("#editModal").modal("show");
            // 获取当前角色的 id
            var roleName = $(this).parent().prev().text();
            // 为了让执行更新的按钮能够获取到 roleId 的值，把它放在全局变量上
            window.roleId = this.id;
            // 使用roleName的值设置模态框中的文本框
            $("#editModal [name=roleName]").val(roleName);
        });

        // 7.给更新模态框中的更新按钮绑定单击响应函数
        $("#updateRoleBtn").click(function () {

            // 从文本框中获取新的角色名称
            var roleName = $("#editModal [name=roleName]").val();

            // 发送 Ajax 请求执行更新
            $.ajax({
                url:"role/update.json",
                type:"post",
                data:{
                    id:window.roleId,
                    name:roleName
                },
                dataType: "json",
                success:function (response) {
                    var result = response.result;

                    if(result == "SUCCESS"){
                        layer.msg("操作成功！");

                        // 重新加载分页数据
                        generatePage();
                    }

                    if (result == "FAILED"){
                        layer.msg("操作失败！"+response.message);
                    }
                },
                error:function (response) {
                    layer.msg(response.status+" "+response.statusText);
                }
            });

            // 关闭模态框
            $("#editModal").modal("hide");

        });

        // 8.点击确认删除模态框中的“确认删除”按钮执行删除
        $("#removeRoleBtn").click(function () {

            // 把数组转换成json字符串，用于给服务器返回
            var requestBody = JSON.stringify(window.roleIdArray);

            $.ajax({
                url:"role/remove/by/role/id/array.json",
                type:"post",
                data:requestBody,
                contentType:"application/json;charset=UTF-8",
                dataType:"json",
                success:function (response) {
                    var result = response.result;

                    if(result == "SUCCESS"){
                        layer.msg("操作成功！");

                        // 重新加载分页数据
                        generatePage();
                    }

                    if (result == "FAILED"){
                        layer.msg("操作失败！"+response.message);
                    }
                },
                error:function (response) {
                    layer.msg(response.status+" "+response.statusText);
                }

            });

            // 关闭模态框
            $("#confirmModal").modal("hide");


        });

        // 9.给单条删除按钮绑定单击响应函数
        $("#rolePageBody").on("click",".removeBtn",function () {

            // 从当前按钮出发获取角色名称
            var roleName = $(this).parent().prev().text();

            // 创建role对象存入数组
            var roleArray = [{
                roleId:this.id,
                roleName:roleName
            }];

            // 调用专门的函数打开模态框
            showConfirmModal(roleArray);


        });

        // 10.给全选按钮绑定单击函数
        $("#summaryBox").click(function () {

            // 获取当前全选框自身状态
            var currentStatus = this.checked;

            // 使用全选框的状态设置其他多选框
            $(".itemBox").prop("checked",currentStatus);

        });

        // 11.全选全不选的反向操作
        $("#rolePageBody").on("click",".itemBox",function () {

            // 获取当前已选中的.itemBox单选框数量
            var checkedBoxCount = $(".itemBox:checked").length;

            // 获取全部.itemBox单选框数量
            var totalBoxCount = $(".itemBox").length;

            // 用二者相等与否的结果设置总的全选按钮
            $("#summaryBox").prop("checked",checkedBoxCount == totalBoxCount);

        });

        // 12.给批量删除的按钮绑定单击函数
        $("#batchRemoveBtn").click(function () {

            // 创建一个数组对象，用来存放role对象
            var roleArray = [];

            // 遍历当前选中的单条记录的多选框，放到数组对象中
            $(".itemBox:checked").each(function () {

                var roleId = this.id;
                var roleName = $(this).parent().next().text();
                roleArray.push({
                    roleId:roleId,
                    roleName:roleName
                });

            });

            // 如果数组为空，进行提醒并直接返回
            if(roleArray.length == 0){
                layer.msg("请至少选择一个进行删除！");
                return ;
            }

            // 如果是全选按钮把它的状态改为不选
            $("#summaryBox").prop("checked",false);

            // 调用函数打开模态框进行后续操作
            showConfirmModal(roleArray);




        });

        // 13.给分配权限按钮绑定单击响应函数
        $("#rolePageBody").on("click",".checkBtn",function () {

            // 把当前角色id存入全局变量
            window.id = this.id;

            //  打开模态框
            $("#assignModal").modal("show");

            // 在模态框中装载树 Auth 的形结构数据
            fillAuthTree();
        });

        // 14.给分配权限模态框中的“分配”按钮绑定单击响应函数，执行分配
        $("#assignBtn").click(function () {

            // 声明一个专门的数组存放 id
            var authArray = [];
            var zTreeObj = $.fn.zTree.getZTreeObj("authTreeDemo");
            // 获取全部被勾选的节点
            var checkedNodes = zTreeObj.getCheckedNodes();
            // 遍历 checkedNodes,将节点id存入数组
            for(var i = 0;i<checkedNodes.length;i++){
                var checkedNode = checkedNodes[i];
                var authId = checkedNode.id;
                authArray.push(authId);
            }

            var requestBody = {
                authIdArray:authArray,
                // 为了服务器端 handler 方法能够统一使用 List<Integer>方式接收数据，roleId 也存入数组
                roleId:[window.id]
            };

            // 转换成json字符串
            requestBody = JSON.stringify(requestBody);

            // 发送请求执行分配
            $.ajax({
                url:"assign/do/role/assign/auth.json",
                type:"post",
                data:requestBody,
                contentType: "application/json;charset=UTF-8",
                dataType:"json",
                success:function (response) {
                    var result = response.result;

                    if(result == "SUCCESS"){
                        layer.msg("操作成功！");
                    }

                    if (result == "FAILED"){
                        layer.msg("操作失败！"+response.message);
                    }
                },
                error:function (response) {
                    layer.msg(response.status+" "+response.statusText);
                }
            });

            // 关闭模态框
            $("#assignModal").modal("hide");

        });

    });

</script>

<body>

<%@include file="/WEB-INF/include-nav.jsp" %>
<div class="container-fluid">
    <div class="row">
        <%@include file="/WEB-INF/include-sidebar.jsp" %>
        <div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">
            <div class="panel panel-default">
                <div class="panel-heading">
                    <h3 class="panel-title"><i class="glyphicon glyphicon-th"></i> 数据列表</h3>
                </div>
                <div class="panel-body">
                    <form class="form-inline" role="form" style="float:left;">
                        <div class="form-group has-feedback">
                            <div class="input-group">
                                <div class="input-group-addon">查询条件</div>
                                <input id="keywordInput" class="form-control has-success" type="text" placeholder="请输入查询条件">
                            </div>
                        </div>
                        <button id="searchBtn" type="button" class="btn btn-warning"><i class="glyphicon glyphicon-search"></i> 查询</button>
                    </form>
                    <button id="batchRemoveBtn" type="button" class="btn btn-danger" style="float:right;margin-left:10px;"><i class=" glyphicon glyphicon-remove"></i> 删除</button>
                    <button id="showAddModalBtn" type="button" class="btn btn-primary" style="float:right;" ><i class="glyphicon glyphicon-plus"></i> 新增</button>
                    <br>
                    <hr style="clear:both;">
                    <div class="table-responsive">
                        <table class="table  table-bordered">
                            <thead>
                            <tr>
                                <th width="30">#</th>
                                <th width="30"><input id="summaryBox" type="checkbox"></th>
                                <th>名称</th>
                                <th width="100">操作</th>
                            </tr>
                            </thead>
                            <tbody id="rolePageBody">
                            </tbody>
                            <tfoot>
                            <tr>
                                <td colspan="6" align="center">
                                    <div id="Pagination" class="pagination"><!--这里显示分页--></div>
                                </td>
                            </tr>

                            </tfoot>
                        </table>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>

<%@include file="/WEB-INF/modal-role-add.jsp" %>
<%@include file="/WEB-INF/modal-role-edit.jsp" %>
<%@include file="/WEB-INF/modal-role-confirm.jsp" %>
<%@include file="/WEB-INF/modal-role-assign-auth.jsp"%>

</body>
</html>